package com.ride.dao;

import java.util.List;

import com.ride.model.Address;

/**
 * Interface zum Zugriff auf Adressen
 *
 * @version $LastChangedRevision: 15 $
 *          <p/>
 *          $LastChangedBy: marcel.menze@gmail.com $
 *          <p/>
 *          $LastChangedDate: 2011-04-03 13:43:25 +0000 (Sun, 03 Apr 2011) $
 */
public interface AddressDao {

    /**
     * Erzeugt eine neue Adresse.
     *
     * @param address Adresse
     */
    void persist(Address address);

    /**
     * Ermittelt eine Adresse anhand der ID
     *
     * @param id ID
     * @return Adresse
     */
    Address findById(Long id);

    /**
     * Aktaulisiert eine vorhanden Adresse.
     *
     * @param address Adresse
     */
    void update(Address address);

    /**
     * Löscht eine Adresse.
     *
     * @param address Adresse
     */
    void delete(Address address);

    /**
     * Ermittelt alle vorhanden Adressen.
     *
     * @return Liste mit Adressen
     */
    List<Address> findAllAddresses();

    /**
     * Ermittelt alle Adressen anhand der Str., der Hausnr., der Stadt und der PLZ.
     *
     * @param street  Straße
     * @param number  Hausnummer
     * @param city    Stadt
     * @param zipCode PLZ
     * @return Liste mit Adressen
     */
    List<Address> findAddress(String street, int number, String city, int zipCode);

}
